AddressOf, operator

       

Een enkelvoudige operator die ervoor zorgt dat het adres van de procedure waaraan de operator voorafgaat, wordt doorgegeven aan een API-procedure die op die positie in de lijst met argumenten een functiepointer verwacht.

Syntaxis

AddressOf procedurenaam

De vereiste procedurenaam noemt de procedure waarvan het adres moet worden doorgegeven. Dit moet een procedure zijn in een standaardmodule van het project waarin de aanroep wordt gepleegd.

Notities

Wanneer een procedurenaam in een lijst met argumenten voorkomt, wordt de procedure doorgaans geδvalueerd, en wordt het adres van de resultaatwaarde van de procedure doorgegeven. AddressOf maakt mogelijk dat het adres van de procedure in een dynamic link library (DLL) aan een Windows API-functie wordt doorgegeven, in plaats van de resultaatwaarde van de procedure. Nu kan de API-functie dit adres gebruiken om de Basic-procedure aan te roepen. Dit proces wordt een callback genoemd. De operator AddressOf staat alleen in de aanroep van de API-procudure.

Hoewel u AddressOf kunt gebruiken om procedurepointers tussen Basic-procedures door te geven, kunt u een functie niet vanuit Basic door middel van zo'n pointer opnieuw aanroepen. Dat betekent bijvoorbeeld dat een klasse, geschreven in Basic, met behulp van een dergelijke pointer geen callback naar zijn besturing kan uitvoeren. Wanneer u AddressOf gebruikt om een procedurepointer tussen procedures binnen Basic door te geven, moet de parameter van de aangeroepen procedure van het type As Long zijn.

Waarschuwing   Het gebruik van AddressOf kan onvoorspelbare resultaten opleveren als u het concept van functie-callbacks niet volledig begrijpt. U moet begrijpen hoe het Basic-gedeelte van de callback werkt, evenals de programmacode van de DLL waaraan u het functieadres doorgeeft. Het opsporen van fouten in dergelijke interacties is moeilijk aangezien het programma in hetzelfde proces wordt uitgevoerd als de ontwikkelomgeving. In dergelijke gevallen is het soms niet eens mogelijk om systematisch fouten op te sporen.

Opmerking   In DLL's, gecompileerd met Microsoft Visual C++ (of soortgelijke hulpmiddelen) kunt u uw eigen callback functieprototypen maken. Als u met AddressOf wilt werken, moet het prototype voldoen aan de aanroepconventie __stdcall. De standaardaanroepconventie (__cdecl) werkt niet met AddressOf.

Aangezien de initiator van een callback zich niet in het programma bevindt, is het belangrijk dat een fout in de callback procedure niet wordt weergegeven aan de initiator van de aanroep. U bereikt dit door de instructie On Error Resume Next aan het begin van de callback procedure te plaatsen.